#include <my_header.h>
// 避免正在执行的信号处理函数被新的信号中断
/* Usage:  ./sa_mask*/
//  使用sa_mask阻塞信号(Eg: 在SIGINT/Ctrl+c信号处理函数
//  执行的时候, 阻塞SIGQUIT/Ctrl+\  )

void func(int sig_val)
{
    printf("1. sig_val：%d\n", sig_val);
    sleep(5);
    printf("2 sig_val:%d\n", sig_val);
}
// 处理2号信号集 不被3号信号集打断 sig_mask
int main(void){                                  
    sigset_t sa_mask;   //设置信号集
    sigemptyset(&sa_mask);  // 初始化信号集
    // 阻塞所有信号
    // sigfillset(&sa_mask);

    // 阻塞SIGQUIT ctrl+"\"
    sigaddset(&sa_mask, SIGQUIT);
    // 定义新和旧的信号处理结构
    struct sigaction act, old;
    memset(&act, 0, sizeof(act));   // 清零新的信号处理结构
    // 指向函数fun
    act.sa_handler = func;
    // 设置在处理信号时要阻塞的信号集
    act.sa_mask = sa_mask;

    sigaction(SIGINT, &act, &old);

    while(1);

    return 0;
}


